﻿<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<!-- saved from url=(0080)mhtml:file://E:\sve-air\documentacion\RSA Encryption Schemes - Crypto++ Wiki.mht -->
<HTML lang=en 
dir=ltr><HEAD><TITLE>RSA Encryption Schemes - Crypto++ Wiki</TITLE>
<META http-equiv=Content-Type content="text/html; charset=utf-8">
<META content="MSHTML 6.00.6000.17080" name=GENERATOR><LINK href="/favicon.ico" 
rel="shortcut icon"><LINK title="Crypto++ Wiki (en)" 
href="/w/opensearch_desc.php" type=application/opensearchdescription+xml 
rel=search><LINK title="Crypto++ Wiki Atom feed" 
href="/w/index.php?title=Special:RecentChanges&amp;feed=atom" 
type=application/atom+xml rel=alternate><LINK media=screen 
href="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/shared.css" 
rel=stylesheet><LINK media=print 
href="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/commonPrint.css" 
rel=stylesheet><LINK media=screen 
href="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/main.css" 
rel=stylesheet><!--[if lt IE 5.5000]><link rel="stylesheet" href="/w/skins/monobook/IE50Fixes.css?270" media="screen" /><![endif]--><!--[if IE 5.5000]><link rel="stylesheet" href="/w/skins/monobook/IE55Fixes.css?270" media="screen" /><![endif]--><!--[if IE 6]><link rel="stylesheet" href="/w/skins/monobook/IE60Fixes.css?270" media="screen" /><![endif]--><!--[if IE 7]><LINK 
media=screen 
href="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/IE70Fixes.css" 
rel=stylesheet><![endif]--><LINK 
href="/w/index.php?title=MediaWiki:Common.css&amp;usemsgcache=yes&amp;ctype=text%2Fcss&amp;smaxage=18000&amp;action=raw&amp;maxage=18000" 
rel=stylesheet><LINK media=print 
href="/w/index.php?title=MediaWiki:Print.css&amp;usemsgcache=yes&amp;ctype=text%2Fcss&amp;smaxage=18000&amp;action=raw&amp;maxage=18000" 
rel=stylesheet><LINK 
href="/w/index.php?title=MediaWiki:Monobook.css&amp;usemsgcache=yes&amp;ctype=text%2Fcss&amp;smaxage=18000&amp;action=raw&amp;maxage=18000" 
rel=stylesheet><LINK 
href="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/index.css" 
rel=stylesheet>
<SCRIPT>
var skin="monobook",
stylepath="/w/skins",
wgUrlProtocols="http\\:\\/\\/|https\\:\\/\\/|ftp\\:\\/\\/|irc\\:\\/\\/|gopher\\:\\/\\/|telnet\\:\\/\\/|nntp\\:\\/\\/|worldwind\\:\\/\\/|mailto\\:|news\\:|svn\\:\\/\\/",
wgArticlePath="/wiki/$1",
wgScriptPath="/w",
wgScriptExtension=".php",
wgScript="/w/index.php",
wgVariantArticlePath=false,
wgActionPaths={},
wgServer="http://www.cryptopp.com",
wgCanonicalNamespace="",
wgCanonicalSpecialPageName=false,
wgNamespaceNumber=0,
wgPageName="RSA_Encryption_Schemes",
wgTitle="RSA Encryption Schemes",
wgAction="view",
wgArticleId=1864,
wgIsArticle=true,
wgUserName=null,
wgUserGroups=null,
wgUserLanguage="en",
wgContentLanguage="en",
wgBreakFrames=false,
wgCurRevisionId=6485,
wgVersion="1.16.0",
wgEnableAPI=true,
wgEnableWriteAPI=true,
wgSeparatorTransformTable=["", ""],
wgDigitTransformTable=["", ""],
wgMainPageTitle="Main Page",
wgFormattedNamespaces={"-2": "Media", "-1": "Special", "0": "", "1": "Talk", "2": "User", "3": "User talk", "4": "Crypto++ Wiki", "5": "Crypto++ Wiki talk", "6": "File", "7": "File talk", "8": "MediaWiki", "9": "MediaWiki talk", "10": "Template", "11": "Template talk", "12": "Help", "13": "Help talk", "14": "Category", "15": "Category talk"},
wgNamespaceIds={"media": -2, "special": -1, "": 0, "talk": 1, "user": 2, "user_talk": 3, "crypto++_wiki": 4, "crypto++_wiki_talk": 5, "file": 6, "file_talk": 7, "mediawiki": 8, "mediawiki_talk": 9, "template": 10, "template_talk": 11, "help": 12, "help_talk": 13, "category": 14, "category_talk": 15, "image": 6, "image_talk": 7},
wgSiteName="Crypto++ Wiki",
wgCategories=["Sample", "Download", "Public Key"],
wgRestrictionEdit=[],
wgRestrictionMove=[];
</SCRIPT>

<SCRIPT 
src="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/wikibits.js"></SCRIPT>

<SCRIPT 
src="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/ajax.js"></SCRIPT>

<SCRIPT 
src="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/index.php"></SCRIPT>
</HEAD>
<BODY 
class="mediawiki ltr ns-0 ns-subject page-RSA_Encryption_Schemes skin-monobook">
<DIV id=globalWrapper>
<DIV id=column-content>
<DIV id=content><A id=top></A>
<H1 class=firstHeading id=firstHeading>RSA Encryption Schemes</H1>
<DIV id=bodyContent>
<H3 id=siteSub>From Crypto++ Wiki</H3>
<DIV id=contentSub></DIV>
<DIV id=jump-to-nav>Jump to: <A 
href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#column-one">navigation</A>, 
<A 
href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#searchInput">search</A></DIV><!-- start content -->
<P>For the main <A class=mw-redirect title=RSA 
href="http://www.cryptopp.com/wiki/RSA">RSA</A> page, visit <A 
title="RSA Cryptography" 
href="http://www.cryptopp.com/wiki/RSA_Cryptography">RSA Cryptography</A>. For 
signature schemes, visit <A title="RSA Signature Schemes" 
href="http://www.cryptopp.com/wiki/RSA_Signature_Schemes">RSA Signature 
Schemes</A>. For a detailed treatment of key generation, loading, saving, 
validation, and formats, see <A title="Keys and Formats" 
href="http://www.cryptopp.com/wiki/Keys_and_Formats">Keys and Formats</A>. </P>
<TABLE class=toc id=toc>
  <TBODY>
  <TR>
    <TD>
      <DIV id=toctitle>
      <H2>Contents</H2></DIV>
      <UL>
        <LI class="toclevel-1 tocsection-1"><A 
        href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Remarks"><SPAN 
        class=tocnumber>1</SPAN> <SPAN class=toctext>Remarks</SPAN></A> 
        <UL>
          <LI class="toclevel-2 tocsection-2"><A 
          href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Plaintext_Length"><SPAN 
          class=tocnumber>1.1</SPAN> <SPAN class=toctext>Plaintext 
          Length</SPAN></A> 
          <LI class="toclevel-2 tocsection-3"><A 
          href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Ciphertext_Length"><SPAN 
          class=tocnumber>1.2</SPAN> <SPAN class=toctext>Ciphertext 
          Length</SPAN></A> 
          <LI class="toclevel-2 tocsection-4"><A 
          href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Buffers"><SPAN 
          class=tocnumber>1.3</SPAN> <SPAN class=toctext>Buffers</SPAN></A> 
        </LI></UL>
        <LI class="toclevel-1 tocsection-5"><A 
        href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Sample_Programs"><SPAN 
        class=tocnumber>2</SPAN> <SPAN class=toctext>Sample Programs</SPAN></A> 
        <UL>
          <LI class="toclevel-2 tocsection-6"><A 
          href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Profiling_Key_Generation"><SPAN 
          class=tocnumber>2.1</SPAN> <SPAN class=toctext>Profiling Key 
          Generation</SPAN></A> 
          <LI class="toclevel-2 tocsection-7"><A 
          href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#RSA_Encryption_Scheme_.28OAEP_and_SHA.29"><SPAN 
          class=tocnumber>2.2</SPAN> <SPAN class=toctext>RSA Encryption Scheme 
          (OAEP and SHA)</SPAN></A> 
          <LI class="toclevel-2 tocsection-8"><A 
          href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#RSA_Encryption_Scheme_.28OAEP_and_SHA.29_using_Filters"><SPAN 
          class=tocnumber>2.3</SPAN> <SPAN class=toctext>RSA Encryption Scheme 
          (OAEP and SHA) using Filters</SPAN></A> </LI></UL>
        <LI class="toclevel-1 tocsection-9"><A 
        href="http://www.cryptopp.com/wiki/RSA_Encryption_Schemes#Downloads"><SPAN 
        class=tocnumber>3</SPAN> <SPAN class=toctext>Downloads</SPAN></A> 
      </LI></UL></TD></TR></TBODY></TABLE>
<SCRIPT>if (window.showTocToggle) { var tocShowText = "show"; var tocHideText = "hide"; showTocToggle(); } </SCRIPT>

<H2><SPAN class=mw-headline id=Remarks>Remarks </SPAN></H2>
<H3><SPAN class=mw-headline id=Plaintext_Length>Plaintext Length </SPAN></H3>
<P>The maximum length of a plaintext string that can be encrypted with RSA can 
be determined by <TT>FixedMaxPlaintextLength</TT>. On error, 
<TT>FixedMaxPlaintextLength</TT> returns 0. The value returned by 
<TT>FixedMaxPlaintextLength</TT> is directly related to the modulus size 
<I>n</I>. </P>
<H3><SPAN class=mw-headline id=Ciphertext_Length>Ciphertext Length </SPAN></H3>
<P>The length of the resulting ciphertext can be determined by 
<TT>FixedCiphertextLength</TT>. On error, <TT>FixedCiphertextLength</TT> returns 
0. The value returned by <TT>FixedCiphertextLength</TT> is directly related to 
the modulus size <I>n</I>. </P>
<H3><SPAN class=mw-headline id=Buffers>Buffers </SPAN></H3>
<P>When encrypting and decrypting using Crypto++, the plaintext and ciphertext 
buffers can be the same. This effectively means in-place encryption and 
decryption can be performed. However, <B>always make sure</B> the buffer is 
large enough to hold the encrypted data (which will be larger than the 
plaintext). If the buffers are not the same, the buffers must not overlap. 
Finally, both <TT>CiphertextLength</TT> and <TT>MaxPlaintextLength</TT> return 0 
on error. </P><PRE>// Encrypt
size_t cipherTextSize = publicKey.CiphertextLength( plainTextSize );
assert( 0&nbsp;!= cipherTextSize );
assert( plainTextSize &gt;= cipherTextSize );

publicKey.Encrypt(rnd, (byte*)plainText, plainTextSize, (byte*)plainText);

...

// Decrypt
size_t plainTextSize = privateKey.MaxPlaintextLength( cipherTextSize );
assert( 0&nbsp;!= plainTextSize );
assert( cipherTextSize &gt;= plainTextSize );

DecodingResult result = privateKey.Decrypt(rnd, (byte*)plainText,
    cipherTextSize, (byte*)plainText);
assert( plainTextSize == result.messageLength );</PRE>
<H2><SPAN class=mw-headline id=Sample_Programs>Sample Programs </SPAN></H2>
<H3><SPAN class=mw-headline id=Profiling_Key_Generation>Profiling Key 
Generation</SPAN></H3>
<P>The following demonstrates profiling key geeration times using Crypto++'s 
<TT>ThreadUserTimer</TT>. </P><PRE>try
{  
  AutoSeededRandomPool prng;
  RSA::PrivateKey rsa;
  ThreadUserTimer timer(TimerBase::MILLISECONDS);

  timer.StartTimer();

  const int bits = 2048;
  rsa.GenerateRandomWithKeySize(prng, bits);

  ///////////////////////////////////////

  unsigned long elapsed = timer.GetCurrentTimerValue();
  unsigned long ticks = timer.TicksPerSecond();
  unsigned long seconds = elapsed / ticks;

  // days, hours, minutes, seconds, 100th seconds
  unsigned int d=0, h=0, m=0, s=0, p=0;

  p = ((elapsed * 100) / ticks)&nbsp;% 100;
  s = seconds&nbsp;% 60;
  m = (seconds / 60)&nbsp;% 60;
  h = (seconds / 60 / 60)&nbsp;% 60;
  d = (seconds / 60 / 60 / 24)&nbsp;% 24;

  float fs = (seconds + ((float)p/100));

  ///////////////////////////////////////

  stringstream ss;

  if(d) {
    ss &lt;&lt; d &lt;&lt; ((d == 1)&nbsp;? " day, "&nbsp;: " days, ");
    goto print_hours;
  }

  if(h) {
    print_hours:
      ss &lt;&lt; h &lt;&lt; ((h == 1)&nbsp;? " hour, "&nbsp;: " hours, ");
      goto print_minutes;
  }

  if(m) {
    print_minutes:
      ss &lt;&lt; m &lt;&lt; ((m == 1)&nbsp;? " minute, "&nbsp;: " minutes, ");
  }

  ss &lt;&lt; s &lt;&lt; ((s == 1)&nbsp;? " second"&nbsp;: " seconds");        

  cout &lt;&lt; "Elapsed time for " &lt;&lt; bits &lt;&lt; " RSA key: ";
  cout &lt;&lt; fixed &lt;&lt; setprecision(2) &lt;&lt; fs &lt;&lt; "s";
  if(seconds)
    cout &lt;&lt; " (" &lt;&lt; ss.str() &lt;&lt; ")";
  cout &lt;&lt; endl;
}

catch(CryptoPP::Exception&amp; e)
{
  ...
}
...</PRE>
<P>Typical runs will look similar to below. </P><PRE>cryptopp$ rsa_kgen.exe 61440
Elapsed time for 61140 RSA key: 25654.01s (7 hours, 7 minutes, 34 seconds)
cryptopp$ rsa_kgen.exe 30720
Elapsed time for 30720 RSA key: 2255.30s (37 minutes, 35 seconds)
cryptopp$ rsa_kgen.exe 15360
Elapsed time for 15360 RSA key: 285.05s (4 minutes, 45 seconds)
cryptopp$ rsa_kgen.exe 11776
Elapsed time for 11776 RSA key: 142.52s (2 minutes, 22 seconds)
cryptopp$ rsa_kgen.exe 8192
Elapsed time for 8192 RSA key: 43.08s (43 seconds)
cryptopp$ rsa_kgen.exe 4096
Elapsed time for 4096 RSA key: 0.70s
cryptopp$ rsa_kgen.exe 2048
Elapsed time for 2048 RSA key: 0.09s
cryptopp$ rsa_kgen.exe 1024
Elapsed time for 1024 RSA key: 0.01s
cryptopp$ rsa_kgen.exe 512
Elapsed time for 512 RSA key: 0.00s
cryptopp$ rsa_kgen.exe 256
Elapsed time for 256 RSA key: 0.00s</PRE>
<H3><SPAN class=mw-headline id=RSA_Encryption_Scheme_.28OAEP_and_SHA.29>RSA 
Encryption Scheme (OAEP and SHA) </SPAN></H3>
<P>The following code demonstrates <A class=mw-redirect title=RSA 
href="http://www.cryptopp.com/wiki/RSA">RSA</A> encryption using OAEP. <A 
title=SHA href="http://www.cryptopp.com/wiki/SHA">SHA</A> is used to generate 
the padding bits and mask the input (see <TT>OAEP_Base::Pad</TT>). </P><PRE>////////////////////////////////////////////////
// Generate keys
AutoSeededRandomPool rng;

InvertibleRSAFunction parameters;
parameters.GenerateRandomWithKeySize( rng, 1536 );

RSA::PrivateKey privateKey( parameters );
RSA::PublicKey publicKey( parameters );

////////////////////////////////////////////////
// Secret to protect
static const int SECRET_SIZE = 16;
SecByteBlock plaintext( SECRET_SIZE );
memset( plaintext, 'A', SECRET_SIZE );

////////////////////////////////////////////////
// Encrypt
RSAES_OAEP_SHA_Encryptor encryptor( publicKey );

// Now that there is a concrete object, we can validate
assert( 0&nbsp;!= encryptor.FixedMaxPlaintextLength() );
assert( plaintext.size() &lt;= encryptor.FixedMaxPlaintextLength() );

// Create cipher text space
size_t ecl = encryptor.CiphertextLength( plaintext.size() );
assert( 0&nbsp;!= ecl );
SecByteBlock ciphertext( ecl );

encryptor.Encrypt( rng, plaintext, plaintext.size(), ciphertext );

////////////////////////////////////////////////
// Decrypt
RSAES_OAEP_SHA_Decryptor decryptor( privateKey );

// Now that there is a concrete object, we can check sizes
assert( 0&nbsp;!= decryptor.FixedCiphertextLength() );
assert( ciphertext.size() &lt;= decryptor.FixedCiphertextLength() );

// Create recovered text space
size_t dpl = decryptor.MaxPlaintextLength( ciphertext.size() );
assert( 0&nbsp;!= dpl );
SecByteBlock recovered( dpl );

DecodingResult result = decryptor.Decrypt( rng,
    ciphertext, ciphertext.size(), recovered );

// More sanity checks
assert( result.isValidCoding );        
assert( result.messageLength &lt;=
    decryptor.MaxPlaintextLength( ciphertext.size() ) );

// At this point, we can set the size of the recovered
//  data. Until decryption occurs (successfully), we
//  only know its maximum size
recovered.resize( result.messageLength );

// SecByteBlock is overloaded for proper results below
assert( plaintext == recovered );

cout &lt;&lt; "Recovered plain text" &lt;&lt; endl;</PRE>
<H3><SPAN class=mw-headline 
id=RSA_Encryption_Scheme_.28OAEP_and_SHA.29_using_Filters>RSA Encryption Scheme 
(OAEP and SHA) using Filters </SPAN></H3>
<P>Using Crypto++ <A title=Pipelining 
href="http://www.cryptopp.com/wiki/Pipelining">pipelining</A>, the previous 
program can be reduced to the following. </P><PRE>////////////////////////////////////////////////
// Generate keys
AutoSeededRandomPool rng;

InvertibleRSAFunction params;
params.GenerateRandomWithKeySize( rng, 1536 );

RSA::PrivateKey privateKey( params );
RSA::PublicKey publicKey( params );

string plain="RSA Encryption", cipher, recovered;

////////////////////////////////////////////////
// Encryption
RSAES_OAEP_SHA_Encryptor e( publicKey );

StringSource( plain, true,
    new PK_EncryptorFilter( rng, e,
        new StringSink( cipher )
    ) // PK_EncryptorFilter
 ); // StringSource

////////////////////////////////////////////////
// Decryption
RSAES_OAEP_SHA_Decryptor d( privateKey );

StringSource( cipher, true,
    new PK_DecryptorFilter( rng, d,
        new StringSink( recovered )
    ) // PK_DecryptorFilter
 ); // StringSource

assert( plain == recovered );</PRE>
<H2><SPAN class=mw-headline id=Downloads>Downloads </SPAN></H2>
<P><A class=internal title=RSA-ES-OAEP-SHA-Test.zip 
href="http://www.cryptopp.com/w/images/e/e5/RSA-ES-OAEP-SHA-Test.zip">RSA-ES-OAEP-SHA-Test.zip</A> 
- Demonstrates RSA-ES (OAEP/SHA) - 5KB </P>
<P><A class=internal title=RSA-ES-OAEP-SHA-Filter-Test.zip 
href="http://www.cryptopp.com/w/images/2/23/RSA-ES-OAEP-SHA-Filter-Test.zip">RSA-ES-OAEP-SHA-Filter-Test.zip</A> 
- Demonstrates RSA-ES (OAEP/SHA) using Filters - 5KB </P><!-- 
NewPP limit report
Preprocessor node count: 80/1000000
Post-expand include size: 0/2097152 bytes
Template argument size: 0/2097152 bytes
Expensive parser function count: 0/100
--><!-- Saved in parser cache with key crypto-wikicryptopp_:pcache:idhash:1864-0!1!0!!en!2!edit=0 and timestamp 20110217071844 -->
<DIV class=printfooter>Retrieved from "<A 
href="mhtml:file://E:\sve-air\documentacion\RSA Encryption Schemes - Crypto++ Wiki.mht!http://www.cryptopp.com/wiki/RSA_Encryption_Schemes">http://www.cryptopp.com/wiki/RSA_Encryption_Schemes</A>"</DIV>
<DIV class=catlinks id=catlinks>
<DIV id=mw-normal-catlinks><A title=Special:Categories 
href="http://www.cryptopp.com/wiki/Special:Categories">Categories</A>: <SPAN 
dir=ltr><A title=Category:Sample 
href="http://www.cryptopp.com/wiki/Category:Sample">Sample</A></SPAN> | <SPAN 
dir=ltr><A title=Category:Download 
href="http://www.cryptopp.com/wiki/Category:Download">Download</A></SPAN> | 
<SPAN dir=ltr><A title="Category:Public Key" 
href="http://www.cryptopp.com/wiki/Category:Public_Key">Public 
Key</A></SPAN></DIV></DIV><!-- end content -->
<DIV class=visualClear></DIV></DIV></DIV></DIV>
<DIV id=column-one>
<DIV class=portlet id=p-cactions>
<H5>Views</H5>
<DIV class=pBody>
<UL>
  <LI class=selected id=ca-nstab-main><A title="View the content page [c]" 
  accessKey=c 
  href="mhtml:file://E:\sve-air\documentacion\RSA Encryption Schemes - Crypto++ Wiki.mht!http://www.cryptopp.com/wiki/RSA_Encryption_Schemes">Page</A> 

  <LI class=new id=ca-talk><A title="Discussion about the content page [t]" 
  accessKey=t 
  href="http://www.cryptopp.com/w/index.php?title=Talk:RSA_Encryption_Schemes&amp;action=edit&amp;redlink=1">Discussion</A> 

  <LI id=ca-viewsource><A 
  title="This page is protected.&#10;You can view its source [e]" accessKey=e 
  href="http://www.cryptopp.com/w/index.php?title=RSA_Encryption_Schemes&amp;action=edit">View 
  source</A> 
  <LI id=ca-history><A title="Past revisions of this page [h]" accessKey=h 
  href="http://www.cryptopp.com/w/index.php?title=RSA_Encryption_Schemes&amp;action=history">History</A> 
  </LI></UL></DIV></DIV>
<DIV class=portlet id=p-personal>
<H5>Personal tools</H5>
<DIV class=pBody>
<UL>
  <LI id=pt-login><A 
  title="You are encouraged to log in; however, it is not mandatory [o]" 
  accessKey=o 
  href="http://www.cryptopp.com/w/index.php?title=Special:UserLogin&amp;returnto=RSA_Encryption_Schemes">Log 
  in / create account</A> </LI></UL></DIV></DIV>
<DIV class=portlet id=p-logo><A title="Visit the main page" 
style="BACKGROUND-IMAGE: url(http://www.cryptopp.com/w/images/0/0b/Logo-Steel.png)" 
href="http://www.cryptopp.com/wiki/Main_Page"></A></DIV>
<SCRIPT type=text/javascript> if (window.isMSIE55) fixalpha(); </SCRIPT>

<DIV class="generated-sidebar portlet" id=p-navigation>
<H5>Navigation</H5>
<DIV class=pBody>
<UL>
  <LI id=n-mainpage-description><A title="Visit the main page [z]" accessKey=z 
  href="http://www.cryptopp.com/wiki/Main_Page">Main page</A> 
  <LI id=n-portal><A 
  title="About the project, what you can do, where to find things" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:Community_portal">Community 
  portal</A> 
  <LI id=n-currentevents><A 
  title="Find background information on current events" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:Current_events">Current 
  events</A> 
  <LI id=n-recentchanges><A title="The list of recent changes in the wiki [r]" 
  accessKey=r href="http://www.cryptopp.com/wiki/Special:RecentChanges">Recent 
  changes</A> 
  <LI id=n-randompage><A title="Load a random page [x]" accessKey=x 
  href="http://www.cryptopp.com/wiki/Special:Random">Random page</A> 
  <LI id=n-help><A title="The place to find out" 
  href="http://www.cryptopp.com/wiki/Help:Contents">Help</A> 
</LI></UL></DIV></DIV>
<DIV class=portlet id=p-search>
<H5><LABEL for=searchInput>Search</LABEL></H5>
<DIV class=pBody id=searchBody>
<FORM id=searchform action=/w/index.php><INPUT type=hidden value=Special:Search 
name=title> <INPUT id=searchInput title="Search Crypto++ Wiki" accessKey=f 
type=search name=search> <INPUT class=searchButton id=searchGoButton title="Go to a page with this exact name if exists" type=submit value=Go name=go>&nbsp; 
<INPUT class=searchButton id=mw-searchButton title="Search the pages for this text" type=submit value=Search name=fulltext> 
</FORM></DIV></DIV>
<DIV class=portlet id=p-tb>
<H5>Toolbox</H5>
<DIV class=pBody>
<UL>
  <LI id=t-whatlinkshere><A title="List of all wiki pages that link here [j]" 
  accessKey=j 
  href="http://www.cryptopp.com/wiki/Special:WhatLinksHere/RSA_Encryption_Schemes">What 
  links here</A> 
  <LI id=t-recentchangeslinked><A 
  title="Recent changes in pages linked from this page [k]" accessKey=k 
  href="http://www.cryptopp.com/wiki/Special:RecentChangesLinked/RSA_Encryption_Schemes">Related 
  changes</A> 
  <LI id=t-specialpages><A title="List of all special pages [q]" accessKey=q 
  href="http://www.cryptopp.com/wiki/Special:SpecialPages">Special pages</A> 
  <LI id=t-print><A title="Printable version of this page [p]" accessKey=p 
  href="http://www.cryptopp.com/w/index.php?title=RSA_Encryption_Schemes&amp;printable=yes" 
  rel=alternate>Printable version</A> 
  <LI id=t-permalink><A title="Permanent link to this revision of the page" 
  href="http://www.cryptopp.com/w/index.php?title=RSA_Encryption_Schemes&amp;oldid=6485">Permanent 
  link</A> </LI></UL></DIV></DIV></DIV><!-- end of the left (by default at least) column -->
<DIV class=visualClear></DIV>
<DIV id=footer>
<DIV id=f-poweredbyico><A href="http://www.mediawiki.org/"><IMG height=31 
alt="Powered by MediaWiki" 
src="RSA%20Encryption%20Schemes%20-%20Crypto++%20Wiki_archivos/mht204(1).tmp" 
width=88></A></DIV>
<UL id=f-list>
  <LI id=lastmod>This page was last modified on 15 November 2010, at 23:46. 
  <LI id=viewcount>This page has been accessed 5,618 times. 
  <LI id=privacy><A title="Crypto++ Wiki:Privacy policy" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:Privacy_policy">Privacy 
  policy</A> 
  <LI id=about><A title="Crypto++ Wiki:About" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:About">About Crypto++ 
  Wiki</A> 
  <LI id=disclaimer><A title="Crypto++ Wiki:General disclaimer" 
  href="http://www.cryptopp.com/wiki/Crypto++_Wiki:General_disclaimer">Disclaimers</A> 
  </LI></UL></DIV></DIV>
<SCRIPT>if (window.runOnloadHook) runOnloadHook();</SCRIPT>
<!-- Served in 0.435 secs. --></BODY></HTML>
